home *** CD-ROM | disk | FTP | other *** search
/ Hardcore Visual Basic 5.0 (2nd Edition) / Hardcore Visual Basic 5.0 - Second Edition (1997)(Microsoft Press).iso / Code / WFormHlp.cls < prev    next >
Text File  |  1997-06-14  |  2KB  |  62 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4. END
  5. Attribute VB_Name = "CWindowToForm"
  6. Attribute VB_GlobalNameSpace = False
  7. Attribute VB_Creatable = True
  8. Attribute VB_PredeclaredId = False
  9. Attribute VB_Exposed = False
  10. Option Explicit
  11.  
  12. Implements IWindowsHelper
  13.  
  14. Private nodeinfo As CStack
  15.  
  16. Public ShowInvisible As Boolean
  17. Public TreeViewControl As TreeView
  18.  
  19. Private Function IWindowsHelper_DoWindow(ByVal iLevel As Integer, _
  20.                                          ByVal hWnd As Long) As Long
  21.     BugAssert hWnd <> hNull
  22.     If iLevel < 0 Then Exit Function ' Ignore desktop window
  23.     ' Add window title; if none, add bracketed window class
  24.     Static s As String, i As Integer
  25.     s = WindowTextLineFromWnd(hWnd)
  26.     If s = sEmpty Then s = "[" & ClassNameFromWnd(hWnd) & "]"
  27.     If ShowInvisible Or IsWindowVisible(hWnd) Then
  28.         ' Update treeview control
  29.         With TreeViewControl
  30.             Dim nodX As Node, sKey As String
  31.             ' Create node key
  32.             sKey = "W" & hWnd
  33.             ' Check if this is first node
  34.             If .Nodes.Count = 0 Then
  35.                 ' Add node
  36.                 Set nodX = .Nodes.Add(, , sKey, s)
  37.                 ' Save node info
  38.                 Set nodeinfo = New CStack
  39.                 nodeinfo.Push CVar(Array(iLevel, sKey))
  40.             Else
  41.                 Dim vNode As Variant
  42.                 ' Find parent or sibling
  43.                 Do
  44.                     vNode = nodeinfo.Pop
  45.                 Loop While (vNode(0) > iLevel)
  46.  
  47.                 ' Add node as sibling or child
  48.                 Set nodX = .Nodes.Add(vNode(1), _
  49.                     IIf(vNode(0) = iLevel, tvwNext, tvwChild), _
  50.                     sKey, s)
  51.                 ' If current node is a child, push parent back on stack
  52.                 If vNode(0) < iLevel Then nodeinfo.Push vNode
  53.                 ' Push node info on stack
  54.                 nodeinfo.Push CVar(Array(iLevel, sKey))
  55.             End If
  56.         End With
  57.     End If
  58.     ' Always successful
  59.     IWindowsHelper_DoWindow = hNull
  60. End Function
  61. '
  62.